/**
 * Copyright (c) 2006-2007 Berlin Brown and botnode.com/Berlin Research  All Rights Reserved
 *
 * http://www.opensource.org/licenses/bsd-license.php

 * All rights reserved.

 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 * * Neither the name of the Botnode.com (Berlin Brown) nor
 * the names of its contributors may be used to endorse or promote
 * products derived from this software without specific prior written permission.

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Date: 12/15/2009 
 *   
 * Home Page: http://botnode.com/
 * 
 * Contact: Berlin Brown <berlin dot brown at gmail.com>
 */
package org.bresearch.octane.proxy;

import java.io.Writer;

import org.apache.ws.commons.tcpmon.core.ui.AbstractRequestResponse;

/**
 * Simple but capabale console proxy implementation based on tcpmon source. 
 * 
 */
public class RequestResponse extends AbstractRequestResponse {
    
    private final StringBuffer requestStream = new StringBuffer(100);
    
    private final StringBuffer responseStream = new StringBuffer(100);
    
    private final ConsoleListener listener;
    
    public RequestResponse(ConsoleListener listenerin, String fromHost) {

        super(listenerin.getConfiguration());
        this.listener = listenerin;
    }

    /**
     * Method remove
     */
    public void remove() {
        System.out.println(">> Console : remove: ");
    }

    protected void setOutHost(String outHost) {
        
        System.out.println(">> Console : setOutHost: " + outHost);
                
    }

    protected void setState(String state) {
        
        System.out.println(">> Console : setState: [" + state + "]");
        if ("Done".equalsIgnoreCase(state)) {            
            System.out.println("***************************");
            System.out.println(" Output previous request : " + state);
            System.out.println(" time: " + this.getTime()); 
            System.out.println("***************************");
            System.out.println(this.requestStream.toString());
            System.out.println("***************************");
            System.out.println(" End Request");
            System.out.println("***************************");
            System.out.println(this.responseStream.toString());
            System.out.println("***************************");
            System.out.println(" End Response");
            System.out.println("*************************** " + state + " >>>>");
        } // End of the if //
    }

    protected void setRequest(String request) {               
        System.out.println(">> Console : setRequest: " + request);       
    }

    public void setElapsed(long elapsed) {
        System.out.println(">> Console : setElapsed: " + elapsed);       
    }

    protected Writer getRequestWriter() {                
        return new InMemoryWriter(this.requestStream);
        
    }

    protected Writer getResponseWriter() {                
        return new InMemoryWriter(this.responseStream);
    }

    /////////////////////////////////////////////////////////////////
    
    @Override
    public String getRequestAsString() {        
        return this.requestStream.toString();
        
    }
    
    @Override
    public String getResponseAsString() {
        return this.responseStream.toString();        
        
    }
    
} // End of the Class //
